﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Cotizav.AccesoDatos
{
    public class CotizacionDetalleDAO
    {
        public int Registrar(Util.ContextoDB ctx, Entidades.Cotizacion newCotizacion, Entidades.CotizacionDetalle newCotizacionDetalle)
        {
            SqlCommand cmd = new SqlCommand("USP_COTIZACIONDETALLE_INSERT", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@IDCOTIZACION", newCotizacion.IdCotizacion);
            cmd.Parameters.AddWithValue("@IDEQUIPO", newCotizacionDetalle.IdEquipo.HasValue ? newCotizacionDetalle.IdEquipo.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@SECUENCIA", newCotizacionDetalle.Secuencia.HasValue ? newCotizacionDetalle.Secuencia.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@ALTERNATIVA", newCotizacionDetalle.Alternativa.HasValue ? newCotizacionDetalle.Alternativa.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@NOMBREEQUIPO", newCotizacionDetalle.NombreEquipo ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@CODIGOEQUIPO", newCotizacionDetalle.CodigoEquipo ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@SERIEEQUIPO", newCotizacionDetalle.SerieEquipo ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@HORASEQUIPO", newCotizacionDetalle.HorasEquipo.HasValue ? newCotizacionDetalle.HorasEquipo.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@ANIO", newCotizacionDetalle.Anio ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@MONEDA", newCotizacionDetalle.Moneda ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@CANTIDAD", newCotizacionDetalle.Cantidad.HasValue ? newCotizacionDetalle.Cantidad.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@HORATARIFA", newCotizacionDetalle.HoraTarifa.HasValue ? newCotizacionDetalle.HoraTarifa.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@MONTOTARIFA", newCotizacionDetalle.MontoTarifa.HasValue ? newCotizacionDetalle.MontoTarifa.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@MONTOTARIFAEXT", newCotizacionDetalle.MontoTarifaExt.HasValue ? newCotizacionDetalle.MontoTarifaExt.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@MONTOTARIFALOC", newCotizacionDetalle.MontoTarifaLoc.HasValue ? newCotizacionDetalle.MontoTarifaLoc.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@TARIFA", newCotizacionDetalle.Tarifa.HasValue ? newCotizacionDetalle.Tarifa.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@TARIFAEXT", newCotizacionDetalle.TarifaExt.HasValue ? newCotizacionDetalle.TarifaExt.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@TARIFALOC", newCotizacionDetalle.TarifaLoc.HasValue ? newCotizacionDetalle.TarifaLoc.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@DSCTOENDOCUMENTO", newCotizacionDetalle.DsctoEnDocumento.HasValue ? newCotizacionDetalle.DsctoEnDocumento.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@DSCTO", newCotizacionDetalle.Dscto.HasValue ? newCotizacionDetalle.Dscto.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@DSCTOEXT", newCotizacionDetalle.DsctoExt.HasValue ? newCotizacionDetalle.DsctoExt.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@DSCTOLOC", newCotizacionDetalle.DsctoLoc.HasValue ? newCotizacionDetalle.DsctoLoc.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@VALORNETO", newCotizacionDetalle.ValorNeto.HasValue ? newCotizacionDetalle.ValorNeto.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@VALORNETOEXT", newCotizacionDetalle.ValorNetoExt.HasValue ? newCotizacionDetalle.ValorNetoExt.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@VALORNETOLOC", newCotizacionDetalle.ValorNetoLoc.HasValue ? newCotizacionDetalle.ValorNetoLoc.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@IMPUESTOS", newCotizacionDetalle.Impuestos.HasValue ? newCotizacionDetalle.Impuestos.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@IMPUESTOSEXT", newCotizacionDetalle.ImpuestosExt.HasValue ? newCotizacionDetalle.ImpuestosExt.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@IMPUESTOSLOC", newCotizacionDetalle.ImpuestosLoc.HasValue ? newCotizacionDetalle.ImpuestosLoc.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@TARIFATOTAL", newCotizacionDetalle.TarifaTotal.HasValue ? newCotizacionDetalle.TarifaTotal.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@TARIFATOTALEXT", newCotizacionDetalle.TarifaTotalExt.HasValue ? newCotizacionDetalle.TarifaTotalExt.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@TARIFATOTALLOC", newCotizacionDetalle.TarifaTotalLoc.HasValue ? newCotizacionDetalle.TarifaTotalLoc.Value : (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@ELIMINADO", newCotizacionDetalle.Eliminado);
            cmd.Parameters.AddWithValue("@ACTIVO", newCotizacionDetalle.Activo);

            int result = cmd.ExecuteNonQuery();

            return result;
        }

        public List<Entidades.CotizacionDetalle> Listar(Util.ContextoDB ctx, Entidades.Cotizacion cotizacion)
        {
            SqlCommand cmd = new SqlCommand(string.Format("select * from COTIZACION_DETALLE where IdCotizacion = {0}", cotizacion.IdCotizacion), ctx.GetConexion());
            DataTable dtCotizacionDetalle = new DataTable();
            dtCotizacionDetalle.Load(cmd.ExecuteReader());

            List<Entidades.CotizacionDetalle> lista = new List<Entidades.CotizacionDetalle>();

            foreach (DataRow fila in dtCotizacionDetalle.Rows)
            {
                Entidades.CotizacionDetalle cd = new Entidades.CotizacionDetalle();

                cd.IdCotizacionDetalle = Int32.Parse(fila["ID"].ToString());
                cd.IdCotizacion = !(fila["IDCOTIZACION"] is DBNull) ? Int32.Parse(fila["IDCOTIZACION"].ToString()) : new Nullable<int>();
                cd.IdEquipo = !(fila["IDEQUIPO"] is DBNull) ? Int32.Parse(fila["IDEQUIPO"].ToString()) : new Nullable<int>();
                cd.Secuencia = !(fila["SECUENCIA"] is DBNull) ? Int32.Parse(fila["SECUENCIA"].ToString()) : new Nullable<int>();
                cd.Alternativa = !(fila["ALTERNATIVA"] is DBNull) ? Int32.Parse(fila["ALTERNATIVA"].ToString()) : new Nullable<int>();
                cd.NombreEquipo = fila["NOMBREEQUIPO"].ToString();
                cd.CodigoEquipo = fila["CODIGOEQUIPO"].ToString();
                cd.SerieEquipo = fila["SERIEEQUIPO"].ToString();
                cd.HorasEquipo = !(fila["HORASEQUIPO"] is DBNull) ? Int32.Parse(fila["HORASEQUIPO"].ToString()) : new Nullable<int>();
                cd.Anio = fila["ANIO"].ToString();
                cd.Moneda = fila["MONEDA"].ToString();
                cd.Cantidad = !(fila["CANTIDAD"] is DBNull) ? Int32.Parse(fila["CANTIDAD"].ToString()) : new Nullable<int>();
                cd.TipoTarifa = fila["TIPOTARIFA"].ToString();
                cd.HoraTarifa = !(fila["HORATARIFA"] is DBNull) ? Int32.Parse(fila["HORATARIFA"].ToString()) : new Nullable<int>();
                cd.MontoTarifa = !(fila["MONTOTARIFA"] is DBNull) ? decimal.Parse(fila["MONTOTARIFA"].ToString()) : new Nullable<decimal>();
                cd.MontoTarifaExt = !(fila["MONTOTARIFAEXT"] is DBNull) ? decimal.Parse(fila["MONTOTARIFAEXT"].ToString()) : new Nullable<decimal>();
                cd.MontoTarifaLoc = !(fila["MONTOTARIFALOC"] is DBNull) ? decimal.Parse(fila["MONTOTARIFALOC"].ToString()) : new Nullable<decimal>();
                cd.Tarifa = !(fila["TARIFA"] is DBNull) ? decimal.Parse(fila["TARIFA"].ToString()) : new Nullable<decimal>();
                cd.TarifaExt = !(fila["TARIFAEXT"] is DBNull) ? decimal.Parse(fila["TARIFAEXT"].ToString()) : new Nullable<decimal>();
                cd.TarifaLoc = !(fila["TARIFALOC"] is DBNull) ? decimal.Parse(fila["TARIFALOC"].ToString()) : new Nullable<decimal>();
                cd.DsctoEnDocumento = !(fila["DSCTOENDOCUMENTO"] is DBNull) ? Int32.Parse(fila["DSCTOENDOCUMENTO"].ToString()) : new Nullable<int>();
                cd.Dscto = !(fila["DSCTO"] is DBNull) ? decimal.Parse(fila["DSCTO"].ToString()) : new Nullable<decimal>();
                cd.DsctoExt = !(fila["DSCTOEXT"] is DBNull) ? decimal.Parse(fila["DSCTOEXT"].ToString()) : new Nullable<decimal>();
                cd.DsctoLoc = !(fila["DSCTOLOC"] is DBNull) ? decimal.Parse(fila["DSCTOLOC"].ToString()) : new Nullable<decimal>();
                cd.ValorNeto = !(fila["VALORNETO"] is DBNull) ? decimal.Parse(fila["VALORNETO"].ToString()) : new Nullable<decimal>();
                cd.ValorNetoExt = !(fila["VALORNETOEXT"] is DBNull) ? decimal.Parse(fila["VALORNETOEXT"].ToString()) : new Nullable<decimal>();
                cd.ValorNetoLoc = !(fila["VALORNETOLOC"] is DBNull) ? decimal.Parse(fila["VALORNETOLOC"].ToString()) : new Nullable<decimal>();
                cd.Impuestos = !(fila["IMPUESTOS"] is DBNull) ? decimal.Parse(fila["IMPUESTOS"].ToString()) : new Nullable<decimal>();
                cd.ImpuestosExt = !(fila["IMPUESTOSEXT"] is DBNull) ? decimal.Parse(fila["IMPUESTOSEXT"].ToString()) : new Nullable<decimal>();
                cd.ImpuestosLoc = !(fila["IMPUESTOSLOC"] is DBNull) ? decimal.Parse(fila["IMPUESTOSLOC"].ToString()) : new Nullable<decimal>();
                cd.TarifaTotal = !(fila["TARIFATOTAL"] is DBNull) ? decimal.Parse(fila["TARIFATOTAL"].ToString()) : new Nullable<decimal>();
                cd.TarifaTotalExt = !(fila["TARIFATOTALEXT"] is DBNull) ? decimal.Parse(fila["TARIFATOTALEXT"].ToString()) : new Nullable<decimal>();
                cd.TarifaTotalLoc = !(fila["TARIFATOTALLOC"] is DBNull) ? decimal.Parse(fila["TARIFATOTALLOC"].ToString()) : new Nullable<decimal>();
                cd.Eliminado = !(fila["ELIMINADO"] is DBNull) ? Int32.Parse(fila["ELIMINADO"].ToString()) : -1;
                cd.Activo = !(fila["ACTIVO"] is DBNull) ? Int32.Parse(fila["ACTIVO"].ToString()) : -1;

                lista.Add(cd);
            }

            return lista;
        }
    }
}
